package Gestor;

import Clases.Feriado;
import Control.ControlPago;
import java.sql.Date;
import java.util.ArrayList;
import org.hibernate.HibernateException;

public class GestorFeriado extends GestorBase {

    private static GestorFeriado instancia = null;

    private GestorFeriado() {

    }

    public static GestorFeriado obtenerInstancia() {
        if (instancia == null) {
            instancia = new GestorFeriado();
        }
        return instancia;
    }

    @Override
    public Object insertar(Object nuevoFeriado) {
        boolean exito = false;
        try {
            iniciaOperacion();
            Object verificacion = sesion.createSQLQuery("select * from feriado where fecha=:nuevaFecha")
                    .setParameter("nuevaFecha", ((Feriado) nuevoFeriado).getFecha()).uniqueResult();
            if (verificacion == null) {
                Object bn = sesion.save(nuevoFeriado);
                tx.commit();
                exito = true;
            }

        } catch (HibernateException he) {
            exito = false;
            manejaExcepcion(he);
        } finally {
            sesion.close();
        }

        return exito;
    }

    public ArrayList<Feriado> obtenerListaFeriados() throws HibernateException {
        ArrayList<Feriado> listaFeriados = new ArrayList<Feriado>();
        ArrayList<java.util.Date> fechas = ControlPago.obtenerInstancia().getPago();
        try {
            iniciaOperacion();
            listaFeriados = (ArrayList<Feriado>) sesion.createSQLQuery("SELECT * FROM feriado where fecha >= :fech ")
                    .addEntity(Feriado.class)
                    .setParameter("fech", fechas.get(0))
                    .list();
        } finally {
            sesion.close();
        }

        return listaFeriados;
    }

    public ArrayList<Feriado> obtenerListaFeriadosQuincenal(Date fechaPagoInicio, Date fechaPagoFin) throws HibernateException {
        ArrayList<Feriado> listaFeriados = new ArrayList<Feriado>();
        try {
            iniciaOperacion();
            listaFeriados = (ArrayList<Feriado>) sesion.createSQLQuery("SELECT * FROM feriado where fecha >= :fechaInicio and fecha <= :fechaFin")
                    .addEntity(Feriado.class)
                    .setParameter("fechaInicio", fechaPagoInicio)
                    .setParameter("fechaFin", fechaPagoFin)
                    .list();
        } finally {
            sesion.close();
        }

        return listaFeriados;
    }

}
